package cn.group.hotel2.service;

import cn.group.hotel2.pojo.dto.RoomCheckOutAddNewDTO;
import cn.group.hotel2.pojo.dto.RoomCheckOutUpdateDTO;
import cn.group.hotel2.pojo.vo.RoomCheckOutListCountVO;
import cn.group.hotel2.pojo.vo.RoomCheckOutListItemVO;
import cn.group.hotel2.pojo.vo.RoomCheckOutStandardVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 处理退房登记数据相关的业务接口
 * 
 * @author wcl
 * @version 0.0.1
 * @date 2022/11/25
 */
@Transactional(rollbackFor = Exception.class)
public interface IRoomCheckOutService {

    /**
     * 新增退房登记信息
     * @param roomCheckOutAddNewDTO 退房相关的数据
     */
    void addNew(RoomCheckOutAddNewDTO roomCheckOutAddNewDTO);

    /**
     * 根据记录id删除退房登记单条数据
     * @param id 记录id
     */
    void deleteById(Long id);

    /**
     * 根据id修改退房登记信息
     * @param id 记录id
     * @param roomCheckOutUpdateDTO 要修改的退房登记数据
     */
    void updateById(Long id, RoomCheckOutUpdateDTO roomCheckOutUpdateDTO);

    /**
     * 根据退房登记id查询登记数据
     * @param id 记录id
     * @return 查询到的数据
     */
    RoomCheckOutStandardVO getStandardById(Long id);

    /**
     * 查询退房登记前两个数据的列表
     * @return 查询列表结果
     */
    List<RoomCheckOutListItemVO> list();

    /**
     * 根据所选的页数来分页查询
     * @param pageNum 需要跳过的记录数
     * @return 查询列表结果
     */
    List<RoomCheckOutListItemVO> listByPageNum(Long pageNum);

    /**
     * 查询列表所有的数据以统计其数量
     * @return 查询列表结果
     */
    List<RoomCheckOutListCountVO> listCount();
}
